package E.哈希表;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;

public class _349_两个数组的交集 {
    /**
     * 自解：利用set存储数组1里的 然后数组2判断有没有 如果有 就添加进结果 并且删除set中的 避免重复
     * ---运行：耗时9.22% 空间74.27%
     * -----优化：降低空间复杂度，首先遍历较短的数组并在哈希表中记录每个数字以及对应出现的次数，然后遍历较长的数组得到交集
     * @param nums1
     * @param nums2
     * @return
     */
    public int[] intersection(int[] nums1, int[] nums2) {



        ArrayList<Integer> a=new ArrayList<Integer>();
        int index =0;

        Set<Integer> set = new HashSet<>();
        for (int num:nums1){
            set.add(num);
        }

        for (int i=0;i< nums2.length;i++){
            if (set.contains(nums2[i])){//o（1）时间判断
              //  result[index++] = nums2[i];
                a.add(nums2[i]);
                set.remove(nums2[i]);
            }
        }

        int[] result = new int[a.size()];
        result = a.stream().mapToInt(Integer::valueOf).toArray();
        return result;

    }

    /**
     * 题解：排序+双指针
     * 但是排序时间不一定
     */
}
